package com.liuyanban.dao.impl.user;

import java.util.Collection;

import org.springframework.stereotype.Repository;

import com.liuyanban.dao.impl.base.BaseDaoImpl;
import com.liuyanban.dao.user.PrivilegeDao;
import com.liuyanban.domain.user.Privilege;

@Repository("privilegeDao")
public class PrivilegeDaoImpl extends BaseDaoImpl<Privilege> implements
		PrivilegeDao {

	@Override
	public Collection<Privilege> getPrivilegesByRid(Long rid) {
		/**
		 * 1、加载所有的权限 2、加载该角色能够访问到的权限 3、两次遍历，把所有的权限中用户能够访问到的权限的checked设置为true
		 */
		Collection<Privilege> allPrivileges = this.hibernateTemplate
				.find("from Privilege");
		Collection<Privilege> rolePrivileges = this.hibernateTemplate.find(
				"from Privilege p inner join fetch p.roles r where r.rid=?",
				rid);
		for (Privilege privilege : allPrivileges) {// 遍历所有的权限
			for (Privilege privilege2 : rolePrivileges) {// 遍历角色的权限
				// 如果当前正在遍历的所有的权限中的该项是角色能够访问到的
				if (privilege.getPrivilegeid().longValue() == privilege2
						.getPrivilegeid().longValue()) {
					privilege.setChecked(true);
				}
			}
		}
		return allPrivileges;
	}

	@Override
	public Collection<Privilege> getFunctionByUid(Long userid) {
		return this.hibernateTemplate
				.find("from Privilege p inner join fetch p.roles r "
						+ "inner join fetch r.users u where u.userid=?", userid);
	}

}
